const express = require('express');
const bip39 = require('bip39');
const app = express();
const port = 3000;
const { HDNodeWallet } = require('ethers');
const ethers = require("ethers");

// 托管 public 文件夹中的静态文件
app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/public/register.html');
});



const users = {}; // 存储用户名、助记词和明文密码的映射

app.post('/register', (req, res) => {
  const { username, password } = req.body;
  if (users[username]) {
    return res.status(409).json({ error: 'Username already exists' });
  }

  try {
    const wallet = ethers.Wallet.createRandom(); // 随机生成一个钱包
    const mnemonic = wallet.mnemonic.phrase;

    users[username] = {
      mnemonic,
      privateKey: wallet.privateKey,
      password // 直接存储明文密码
    };

    res.status(201).json({ message: 'User registered successfully', mnemonic });
    console.log('mnemonic:', mnemonic);
  } catch (error) {
    console.error('Registration error:', error);
    res.status(500).json({ error: 'Internal server error' });
  }
});

app.post('/login', async (req, res) => {
  const { password, mnemonic } = req.body;
  console.log('All users:', users); // 打印所有用户

  // 检查用户是否存在并验证密码
  const user = Object.values(users).find(user => user.password === password);
  if (!user) {
    console.log('User not found or password incorrect');
    return res.status(401).json({ error: 'Invalid password or mnemonic' });
  }
  console.log('Found user:', user); 

  // 验证助记词
  if (!bip39.validateMnemonic(mnemonic)) {
    return res.status(401).json({ error: 'Invalid mnemonic' });
  }

  // 使用助记词创建钱包
  try {
    const wallet = ethers.HDNodeWallet.fromPhrase(mnemonic); // 使用存储的助记词
    const storedWallet = new ethers.Wallet(user.privateKey);

    if (wallet.address !== new ethers.Wallet(user.privateKey).address) {
      return res.status(401).json({ error: 'Invalid mnemonic' });
    }
    
    console.log("Wallet address:", wallet.address);
    console.log("Private key:", user.privateKey); // 确保这行打印出私钥
    
    res.status(200).json({ address: wallet.address, privateKey: user.privateKey });
    
    
  } catch (error) {
    console.error("Login error:", error);
    res.status(400).json({ error: 'Invalid mnemonic' });
  }
});


// 捕获所有其他 GET 请求并返回 wallet.html
app.get('*', (req, res) => {
    res.sendFile(__dirname + '/public/wallet.html');
});

app.listen(port, () => {
    console.log(`Server running at http://localhost:${port}`);
});



// const sessions = {}; // 存储当前登录用户的会话信息

// app.post('/register', (req, res) => {
//   const { username, password } = req.body;
//   if (users[username]) {
//     return res.status(409).json({ error: 'Username already exists' });
//   }

//   try {
//     const wallet = ethers.Wallet.createRandom();
//     const mnemonic = wallet.mnemonic.phrase;

//     users[username] = {
//       mnemonic,
//       privateKey: wallet.privateKey,
//       password // 直接存储明文密码
//     };

//     res.status(201).json({ message: 'User registered successfully', mnemonic });
//   } catch (error) {
//     console.error('Registration error:', error);
//     res.status(500).json({ error: 'Internal server error' });
//   }
// });

// app.post('/login', async (req, res) => {
//   const { password, mnemonic } = req.body;

//   // 检查用户
//   const user = Object.values(users).find(user => user.password === password);
//   if (!user) {
//     return res.status(401).json({ error: 'Invalid password or mnemonic' });
//   }

//   // 验证助记词
//   if (!bip39.validateMnemonic(mnemonic)) {
//     return res.status(401).json({ error: 'Invalid mnemonic' });
//   }

//   try {
//     const wallet = ethers.HDNodeWallet.fromPhrase(mnemonic);
//     const storedWallet = new ethers.Wallet(user.privateKey);

//     if (wallet.address !== storedWallet.address) {
//       return res.status(401).json({ error: 'Invalid mnemonic' });
//     }

//     // 使用助记词作为会话标识
//     sessions[mnemonic] = { address: wallet.address, privateKey: user.privateKey };

//     res.status(200).json({ address: wallet.address, privateKey: user.privateKey });
    
//   } catch (error) {
//     console.error("Login error:", error);
//     res.status(400).json({ error: 'Invalid mnemonic' });
//   }
// });

// // 获取当前用户的信息
// app.get('/current-user', (req, res) => {
//   const { mnemonic } = req.query; // 从查询参数中获取助记词
//   const session = sessions[mnemonic];

//   if (!session) {
//     return res.status(404).json({ error: 'User not logged in' });
//   }
  

//   res.status(200).json(session);
// });